package com.dhcc.sdc.cdss.dto;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonInclude;

import java.util.List;

/**
 * cdss接口入参
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ArgumentData {
    /**
     * 推荐类型，通过传入类型拿到该类型推荐的结果
     */
    public enum ParamType {
        // 病历质控
        RecordQuality("RecordQuality","病历质控"),
        // 推荐疑似疾病
        SuspectedDisease("SuspectedDisease","推荐疑似疾病"),
        // 鉴别诊断
        RecommendDifferDiag("RecommendDifferDiag","鉴别诊断"),
        // 出院指导
        OutHospital("OutHospital","出院指导"),
        // 手术并发症
        OperationComplication("OperationComplication","手术并发症"),
        // 手术预警
        OperationWarning("OperationWarning","手术预警"),
        // 护理预警
        NursingWarning("NursingWarning","护理预警"),
        // 推荐护理处置
        RecommendNursing("RecommendNursing","推荐护理处置"),
        // 推荐检验检查
        RecommendLabExam("RecommendLabExam","推荐检验检查"),
        // 推荐治疗方案
        AssistTreat("AssistTreat","推荐治疗方案"),
        // 推荐相关文献
        RecommendDocs("RecommendDocs","推荐相关文献"),
        // 推荐确诊
        RecommendDiag("RecommendDiag","推荐确诊"),
        // 推荐评估量表
        RecommendAssess("RecommendAssess","推荐评估量表"),
        // 检验检查预警
        LabExamWarning("LabExamWarning","检验检查预警"),
        // 疾病预警
        DiseaseWarning("DiseaseWarning","疾病预警"),
        // 药品预警
        DrugWarning("DrugWarning","药品预警"),
        // 评估表评估记录
        RecomAssessLog("RecomAssessLog","评估表评估记录"),
        // 输血预警
        BloodWarning("BloodWarning","输血预警"),
        // 过敏史预警
        AllergyWarning("AllergyWarning","过敏史预警"),
        // 推荐护理处置
        RecomNursingTreat("RecomNursingTreat","推荐护理处置");

        private String type, name;
        ParamType(String type, String name) {
            this.type = type;
            this.name = name;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public static ParamType getEnumByType(String type){
            for (ParamType pt : values()) {
                if(pt.type.equals(type)){
                    return pt;
                }
            }
            return null;
        }
    }

    public static void main(String[] args) {
        ParamType paramType = ParamType.RecomNursingTreat;
        switch (paramType) {
            case AllergyWarning:
                System.out.println("ceshi");
                break;
            default:
                System.out.println("sdada");
                break;
        }
    }

    /**
     * 组信息
     */
    @JSONField(name="GroupInfo")
    public com.dhcc.sdc.cdss.dto.GroupInfo GroupInfo;

    /**
     * 推荐类型
     */
    @JSONField(name="Type")
    public String Type;

    /**
     * 患者年龄、性别等信息键值对
     */
    @JSONField(name="PatientInfo")
    public com.dhcc.sdc.cdss.dto.PatientInfo PatientInfo;
    /**
     * 疾病列表
     */
    @JSONField(name="DiagnosisList")
    public List<DiagnosisInfo> DiagnosisList;
    /**
     * 医嘱列表
     */
    @JSONField(name="OrderEntry")
    public List<OrderInfo> OrderEntry;
    /**
     * 入院记录信息
     */
    @JSONField(name="ProgressNoteList")
    public ProgressNote ProgressNoteList;
    /**
     * 检查结果列表
     */
    @JSONField(name="ExamList")
    public List<ExamInfo> ExamList;
    /**
     * 检验结果列表
     */
    @JSONField(name="LabList")
    public List<LabInfo> LabList;
    /**
     * 体征信息
     */
    @JSONField(name="Signs")
    public SignInfo Signs;
    /**
     * 过敏原
     */
    @JSONField(name="AllergyList")
    public List<AllergyInfo> AllergyList;
    /**
     * 输血信息
     */
    @JSONField(name="BloodTransInfo")
    public List<BloodTransInfo> BloodTransInfo;

    /**
     * 评估信息
     */
    @JSONField(name="RatingScale")
    public List<RatingScaleInfo> RatingScaleInfo;

    /**
     * 手术信息
     */
    @JSONField(name="OperationReport")
    public List<OperationReportInfo> OperationReportInfo;

    public GroupInfo getGroupInfo() {
        return GroupInfo;
    }

    public void setGroupInfo(GroupInfo groupInfo) {
        GroupInfo = groupInfo;
    }

    public String getType() {
        return Type;
    }

    public void setType(String type) {
        Type = type;
    }

    public PatientInfo getPatientInfo() {
        return PatientInfo;
    }

    public void setPatientInfo(PatientInfo patientInfo) {
        PatientInfo = patientInfo;
    }

    public List<DiagnosisInfo> getDiagnosisList() {
        return DiagnosisList;
    }

    public void setDiagnosisList(List<DiagnosisInfo> diagnosisList) {
        DiagnosisList = diagnosisList;
    }

    public List<OrderInfo> getOrderEntry() {
        return OrderEntry;
    }

    public void setOrderEntry(List<OrderInfo> orderEntry) {
        OrderEntry = orderEntry;
    }

    public ProgressNote getProgressNoteList() {
        return ProgressNoteList;
    }

    public void setProgressNoteList(ProgressNote progressNoteList) {
        ProgressNoteList = progressNoteList;
    }

    public List<ExamInfo> getExamList() {
        return ExamList;
    }

    public void setExamList(List<ExamInfo> examList) {
        ExamList = examList;
    }

    public List<LabInfo> getLabList() {
        return LabList;
    }

    public void setLabList(List<LabInfo> labList) {
        LabList = labList;
    }

    public SignInfo getSigns() {
        return Signs;
    }

    public void setSigns(SignInfo signs) {
        Signs = signs;
    }

    public List<AllergyInfo> getAllergyList() {
        return AllergyList;
    }

    public void setAllergyList(List<AllergyInfo> allergyList) {
        AllergyList = allergyList;
    }

    public List<BloodTransInfo> getBloodTransInfo() {
        return BloodTransInfo;
    }

    public void setBloodTransInfo(List<BloodTransInfo> bloodTransInfo) {
        BloodTransInfo = bloodTransInfo;
    }

    public List<RatingScaleInfo> getRatingScaleInfo() {
        return RatingScaleInfo;
    }

    public void setRatingScaleInfo(List<RatingScaleInfo> ratingScaleInfo) {
        RatingScaleInfo = ratingScaleInfo;
    }

    public String toJsonStr() {
        return JSON.toJSONString(this);
    }

    public void setOperationReportInfo(List<com.dhcc.sdc.cdss.dto.OperationReportInfo> operationReportInfo) {
        OperationReportInfo = operationReportInfo;
    }

    public List<com.dhcc.sdc.cdss.dto.OperationReportInfo> getOperationReportInfo() {
        return OperationReportInfo;
    }
}